home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_02 / 8n02102a < prev    next >
Text File  |  1990-02-28  |  1KB  |  87 lines

  1. *****Listing 1*****
  2.  
  3.  
  4. #include <stdio.h>
  5.  
  6. main(argc,argv)
  7. int    argc;
  8. char     **argv;
  9. {
  10. int    i;
  11. void    crc();
  12.  
  13. if (argc <= 1)
  14.     {
  15.     printf("USAGE:crc15 filename [filename...]\n");
  16.     exit(1);
  17.     }
  18.  
  19. for(i=1; i < argc; i++)
  20.     {
  21.     printf ("\n%-s ",argv[i]);
  22.     crc(argv[i]);
  23.     }
  24. exit(0);
  25. } /* main */
  26.  
  27. /* CRC
  28. *  Cycric Redundancy Check
  29. *
  30. */
  31. void crc(argv)
  32. char *argv;
  33. {
  34. FILE *fd;
  35. int crc;
  36. int c;
  37. char crc_char;
  38. int crc_clear(),crc_update(),crc_finish();
  39.  
  40. fd = fopen(argv,"rb");
  41. if(!fd)
  42.   {
  43.   fprintf(stderr,"Can't open %s !\n",argv);
  44.   exit(1);
  45.   }
  46. crc = crc_clear();
  47.  
  48. while((c = getc(fd)) != EOF)
  49.   {
  50.   crc_char = c;
  51.   crc = crc_update(crc,crc_char);
  52.   }
  53.  
  54. crc = crc_finish(crc);
  55. printf("%04x",crc);
  56. fclose(fd);
  57. } /* crc */
  58.  
  59.  
  60. int crc_clear()
  61. {
  62. return(0);
  63. }
  64.  
  65. int crc_update(crc,crc_char)
  66. int crc;
  67. char crc_char;
  68. {
  69. long x;
  70. int i;
  71.  
  72. x = ((long)crc << 8) + crc_char;
  73. for(i = 0;i < 8;i++)
  74.   {
  75.   x = x << 1;
  76.   if(x & 0x01000000)
  77.   x = x ^ 0x01A09700;
  78.   }
  79.   return(((x & 0x00ffff00) >> 8));
  80. }
  81.  
  82. int crc_finish(crc)
  83. int crc;
  84. {
  85. return(crc_update(crc_update(crc,'\0'),'\0'));
  86. }
  87.